package com.example.promethues.strategy;

import com.example.promethues.dto.PromApiData;
import com.example.promethues.dto.PromMatrixDataResult;
import com.example.promethues.vo.DatasetVo;
import com.example.promethues.vo.TSVo;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.reflect.TypeToken;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class PromMatrixConvertStrategy extends PromConvertStrategy{
    public PromMatrixConvertStrategy(String resultType) {
        super(resultType);
    }

    @Override
    public List<DatasetVo> toDataSets(PromApiData promApiData) {
        List<DatasetVo> datasetVos=new ArrayList<>();
        Gson gson=new Gson();
        JsonArray resultArr = gson.toJsonTree(promApiData.getResult()).getAsJsonArray();
        List<PromMatrixDataResult> promMatrixDataResults = gson.fromJson(resultArr, new TypeToken<List<PromMatrixDataResult>>() {
        }.getType());
        for (PromMatrixDataResult promMatrixDataResult : promMatrixDataResults) {
            List<List<String>> values = promMatrixDataResult.getValues();
            List<TSVo> tsVos = new ArrayList<>();
            values.forEach(value -> {
                String value0 = new BigDecimal(value.get(0)).toPlainString();
                tsVos.add(new TSVo(Long.parseLong(value0.substring(0, value0.indexOf("."))) * 1000, value.get(1)));
            });
            DatasetVo datasetVo = new DatasetVo();
            datasetVo.setMetric(promMatrixDataResult.getMetric());
            datasetVo.setSource(tsVos);
            datasetVos.add(datasetVo);
        }
        return datasetVos;
    }
}
